package com.hugang.designmode.factory;

/**
 * 工厂模式——工厂方法模式
 * 工厂方法模式与简单工厂模式的最大不同在于：
 * 简单工厂模式只有一个工厂类，而工厂方法模式有一组实现了相同接口的工厂类，每一个具体工厂类生产特定的产品
 * 优点：
 * 用户只需知道具体工厂的名称就可以得到所要的产品，无需知道产品的创建过程
 * 在系统增加新的产品时，只需添加具体产品类和对应的具体工厂类，无需对原工厂进行任何修改，满足开闭原则。
 * 缺点：
 * 每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类，这增加了系统的复杂度。
 *
 * @author hg
 * @date 2020/6/13 11:35
 */
public class FactoryFunctionTest {

    public static void main(String[] args) {
        AudiFactory audiFactory = new AudiFactory();
        Car audi = audiFactory.getCar();
        audi.run();
        BydFactory bydFactory = new BydFactory();
        Car byd = bydFactory.getCar();
        byd.run();
    }
}

/**
 * 工厂接口
 *
 * @author hg
 * @date 2020/6/13
 */
interface Factory {
    Car getCar();
}

/**
 * 奥迪工厂类，专门生产奥迪
 *
 * @author hg
 * @date 2020/6/13
 */
class AudiFactory implements Factory {

    @Override
    public Car getCar() {
        return new Audi();
    }
}

/**
 * 比亚迪工厂类，专门生产比亚迪
 *
 * @author hg
 * @date 2020/6/13
 */
class BydFactory implements Factory {

    @Override
    public Car getCar() {
        return new Byd();
    }
}